查看原文
其他

开篇,初识 Compose,永久激活 IntelliJ IDEA

ByteCode ByteCode 2022-12-14



这是 dhl 的第 31 篇原创文章

Jetpack Compose 是 Android UI 的现代工具包,简化了 Android 上 UI 的开发。你无需编辑任何 XML 布局,使用声明性函数即可构建一个简单的 UI 组件,UI 构建工作将由 Compose 编译器完成。通过更少的代码、强大的工具和直观的 Kotlin api,加速 Android 上 UI 的开发——来自官网。

Compose 是用 Kotlin 编写的 UI 工具包,JetBrains 基于 Google 提供的 Compose 开发了 Compose for Desktop 简化了桌面应用程序 UI 的开发,因此 Android 和 桌面应用程序之间大部分 UI 代码是共享的。也就是说在 Android 上使用的部分 UI 组件,同样也适用于桌面应用程序 UI 开发,降低了学习成本,在后文中会有详细的演示案例。

在 Compose for Desktop 之前也提供了 JavaFX 、Java Swing 等等,都是为 Java 设计的 UI 工具包。

之前我用 JavaFX 开发过 Win 和  Mac 桌面应用程序,最近我也打算用 Compose for Desktop 重写之前开发的桌面应用程序,后面会出一系列文章。

如何将程序打包成可安装的桌面应用程序,提供给使用者在 Win、Mac 上进行安装,因为篇幅限制,会在后续的文章中介绍。

通过这篇文章你将学习到以下内容:

  • 使用破解补丁无限制的使用 IntelliJ IDEA
  • 破解补丁源码分析
  • Compose for Desktop or Android 应用程序所需的环境配置
  • 如何配置多个不同版本的 JDK
  • Compose for Desktop or Android 示例

环境

使用 Compose for Desktop 开发桌面应用程序,需要如下工具:

  • IntelliJ.IDEA-2020.3 以上
  • JDK 11 以上
  • Kotlin 1.4.2 以上

如果你的电脑上安装的是低版本的 JDK,我不建议你贸然升级到最新版本,因为你之前很多项目都是基于当前 JDK 版本进行开发的,而且有一些软件只在低版本的 JDK 上才能运行,例如  JD-GUI,所以可以在电脑上安装多个 JDK,例如开发 Compose for Desktop 使用 JDK 11,开发 Android 项目使用 JDK 8。

IntelliJ IDEA 开发工具是收费的,而且价格相对而言挺贵的,如果资金允许的前提下,可以前去购买,在本文中也会提供破解补丁,永久激活 IntelliJ IDEA。

我已经将 JDK 11 、IntelliJ.IDEA-(2020.3 ~ 2021.1) 以及 IntelliJ.IDEA 破解补丁已经上传到网盘上,可以 「 点击下方公众号」或者「搜索关注公众号:ByteCode」,回复关键词:compose,即可获取所有软件。


如何配置多个 JDK

这一小节中将会介绍如何在 MAC 上安装多个 JDK(PS: win 配置方式网上有很多教程,可自行搜索):

  • 首先从 Oracle 官网下载并安装 JDK 11 也可以在公众号内,回复关键词:compose,即可获取

我们自己安装的 JDK 默认存放在 /Library/Java/JavaVirtualMachines/ 目录下。

  • 在命令行中输入 vi ~/.bash_profile 打开 bash_profile 文件
  • bash_profile 文件中配置不同版本 JDK 的路径
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home
export JAVA_16_HOME=/Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home

  • bash_profile 文件中添加下面命令,用于切换不同 JDK 版本
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk11='export JAVA_HOME=$JAVA_11_HOME'
alias jdk16='export JAVA_HOME=$JAVA_16_HOME'

  • 验证是否配置成功

使用别名 alias jdk8 切换到 JDK 8 ,然后输入 java -version 获取当前 JDK 的版本。

localhost:~ $ jdk8
localhost:~ $
localhost:~ $ java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

切换到其他 JDK 版本同样如此。

IntelliJ.IDEA 破解补丁的使用

在这一小节中将会介绍如何使用破解补丁永久激活 IntelliJ IDEA。感谢作者 pengzhile/ide-eval-resetter 提供的插件
https://gitee.com/pengzhile/ide-eval-resetter

  • IntelliJ IDEA 破解补丁,仅供个人学习使用, 请勿商用,建议购买正版
  • 破解补丁适用于 IntelliJ IDEA 2020 ~ 2021.1 所有的版本,其他版本尚未尝试
  • 破解教程适用于 Windows/Mac/Linux 系统

只需要五步即可永久使用 IntelliJ IDEA:

  • 首先从 IDEA 官网下载 2021.1 版本并安装,也可以在公众号内,回复关键词:compose,即可获取
  • 安装成功之后运行 IDEA 会弹出一个注册框,勾选 Evaluate for free , 点击 Evaluate, 之后随便创建一个新的项目即可
  • 将破解补丁 ide-eval-resetter-2.1.6.zip 拖入 IDEA 界面中, 会弹出如下界面,点击 Restart 重启 IDEA 即可(PS:破解补丁放在固定位置,不要移动)
  • 重启 IDEA,点击顶部菜单栏 Help,若列表中出现 Eval Reset 选项,则代表安装成功
  • 点击顶部菜单栏 Help -> Eval Reset,弹出如下界面,勾选 Auto reset before per restart,每次重启 IDE 会自动重置所有信息,你无需做额外的事情

验证是否永久激活 IntelliJ IDEA:

  • 运行 IDEA,将系统时间修改到 30 天之后
  • 点击顶部菜单栏 Help -> Register 查看剩余时间
  • 重启 IDEA,再次查看剩余时间,破解补丁会重置试用时间为 30 天

执行完以上步骤就,恭喜你现在可以开始使用 IDEA 开发桌面应用程序了。

破解补丁不仅适用于 IntelliJ IDEA,还适用于 Jetbrains 其他系列产品:AppCode 、 CLion 、 DataGrip 、GoLand  、PhpStorm 、PyCharm 、Rider 、RubyMine 、WebStorm。

以上是关于 Compose for Desktop 所需要的工具配置,Compose for Android 的环境配置非常的简单,从官网下载并安装 Android Studio 2020.3.1 Canary 14 然后在模板列表中选择 Empty Compose Activity ,等待 AS 构建完就可以开始使用了。
https://developer.android.google.cn/studio/preview

破解补丁分析

IntelliJ IDEA 是 Jetbrains 旗下的产品,Jetbrains 的产品会允许你试用 30 天,所以作者 pengzhile 写了一个插件,无限重置 30 天试用期,从而达到永久激活 IDEA  的目的。(PS: 如果 IntelliJ IDEA 版本有更新,千万不要升级)。

首次运行 IntelliJ IDEA 会弹出一个注册框,勾选 Evaluate for free , 点击 Evaluate 会在 /Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/eval/ 目录下生成 idea211.evaluation.key 文件,这个文件记录当前的时间戳,作者会读取当前文件内容,重新写入新的时间戳,重置 30 天试用期,核心源码如下:
src/main/java/io/zhile/research/intellij/ier/ui/form/MainForm.java

Resetter.reset(Resetter.getEvalRecords());
  • 调用 Resetter.getEvalRecords() 会遍历 /Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/ 文件夹下面的内容
  • 调用 Resetter.reset() 方法,重新写入新的时间戳

接下里我们一起来看一下 Resetter.getEvalRecords() 方法的实现。
src/main/java/io/zhile/research/intellij/ier/common/Resetter.java

protected static File getEvalDir() {
    String configPath = PathManager.getConfigPath();

    return new File(configPath, "eval");
}
    
public static List<EvalRecord> getEvalRecords() {
    List<EvalRecord> list = new ArrayList<>();

    File evalDir = getEvalDir();
    if (evalDir.exists()) {
        File[] files = evalDir.listFiles();
        if (files == null) {
            NotificationHelper.showError(null, "List eval license file failed!");
        } else {
            for (File file : files) {
                if (!file.getName().endsWith(".key")) {
                    continue;
                }

                list.add(new LicenseFileRecord(file));
            }
        }
    }
    .......

调用 getEvalRecords() 方法获取 /Users/用户名/Library/Application\ Support/JetBrains/IntelliJIdea2021.1/eval/ 文件夹下以 .key 结尾的文件,然后重写里面的时间戳。
src/main/java/io/zhile/research/intellij/ier/common/LicenseFileRecord.java

public void reset() throws Exception {
    if (!FileUtil.delete(file)) {
        throw new Exception("Remove " + type + " failed: " + file.getAbsolutePath());
    }

    try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(file))) {
        dos.writeLong(~System.currentTimeMillis());
    }
}

Compose for Android or Desktop 示例

在文章开头讲述了,Compose 是由 Kotlin 开发的 UI 工具包,Android 和 桌面应用程序之间大部分 UI 代码是共享的,也就是说在 Android 上使用的部分 UI 组件,同样也适用于桌面应用程序开发。如下图所示。

如上图所示 「创建 Button」核心的代码都是一样的, 如果你之前没有了解过 Compose, 上面的代码可能觉得很陌生,可以先忽略,只需要知道 Android 和 桌面应用程序之间大部分 UI 代码是共享的即可。

参考文章

  • https://developer.android.google.cn/jetpack/compose/setup
  • https://gitee.com/pengzhile/ide-eval-resetter


全文到这里就结束了,如果有帮助欢迎 在看 、点赞 、分享  就是对我最大的鼓励

代码不止,文章不停

欢迎点击下方卡片关注我,持续分享最新的技术

点击上方公众号,回复关键词:compose,即可获取所有软件

推荐阅读



最后推荐我一直在更新维护的项目和网站:

  • 全新系列视频:现代 Android 开发 (MAD) 技巧系列教程
    https://madskills.hi-dhl.com

  • 最新的 AndroidX Jetpack 相关组件的实战项目 以及 原理分析的文章
    https://github.com/hi-dhl/AndroidX-Jetpack-Practice

  • LeetCode / 剑指 offer / 国内外大厂面试题 / 多线程 题解,语言 Java 和 kotlin,包含多种解法、解题思路、时间复杂度、空间复杂度分析

    剑指 offer:https://offer.hi-dhl.com
    LeetCode:https://leetcode.hi-dhl.com

  • 最新 Android 10 源码分析系列文章
    https://github.com/hi-dhl/Android10-Source-Analysis

  • 一系列国外的技术文章,每篇文章都会有译者思考部分,对原文的更加深入的分析
    https://github.com/hi-dhl/Technical-Article-Translation

  • 「为互联网人而设计,国内国外名站导航」涵括新闻、体育、生活、娱乐、设计、产品、运营、前端开发、Android 开发等等网址
    https://site.51git.cn

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存